home *** CD-ROM | disk | FTP | other *** search
Text File | 1996-03-02 | 4.3 KB | 126 lines | [TEXT/CWIE] |
- //New Open Close code for Invoicing example
- #include "BTreeDef.h"
- #include "BTreeProtos.h"
- #include "StandardFile.h"
- #include "InvoiceGlobals.h"
- #include "string.h"
- #include "Strings.h"
-
- //prototypes
- //such a small program, use the globals and not pass parameters
- short NewFile(void);
- short CloseFile(void);
- short OpenFile(void);
-
- short NewFile(void) {
- short NewFileErr = noErr;
- Str255 TempString;
- // first ask user to name/create file
- StandardPutFile("\pCreate New Example File", "\puntitled", &gFileReply);
- if (!gFileReply.sfGood){
- //return if user cancels
- NewFileErr = userCanceledErr;
- return NewFileErr;
- }
- //otherwise create the file using the returned StandardFileReply
- //create and fill in the TreeListHandle
- // see B-Tree helper documentation for what is being done here
- gInvoiceTrees = (TreeListHandle)NewHandle(7*sizeof(TreeControlRecord)+2);
- (**gInvoiceTrees).nrTrees = 7;
- (**gInvoiceTrees).trees[kCustomerNumTree].version = 1;
- (**gInvoiceTrees).trees[kCustomerNumTree].maxKeysPerPage = kKeysPerPage;
- (**gInvoiceTrees).trees[kCustomerNumTree].maxKeySize = kCustomerNumSize;
- (**gInvoiceTrees).trees[kCustomerNameTree].version = 1;
- (**gInvoiceTrees).trees[kCustomerNameTree].maxKeysPerPage = kKeysPerPage;
- (**gInvoiceTrees).trees[kCustomerNameTree].maxKeySize = kCustomerNameSize;
- (**gInvoiceTrees).trees[kPartNumTree].version = 1;
- (**gInvoiceTrees).trees[kPartNumTree].maxKeysPerPage = kKeysPerPage;
- (**gInvoiceTrees).trees[kPartNumTree].maxKeySize = kPartNumSize;
- (**gInvoiceTrees).trees[kPartNameTree].version = 1;
- (**gInvoiceTrees).trees[kPartNameTree].maxKeysPerPage = kKeysPerPage;
- (**gInvoiceTrees).trees[kPartNameTree].maxKeySize = kPartNameSize;
- (**gInvoiceTrees).trees[kInvoiceTree].version = 1;
- (**gInvoiceTrees).trees[kInvoiceTree].maxKeysPerPage = kKeysPerPage;
- (**gInvoiceTrees).trees[kInvoiceTree].maxKeySize = kInvoiceNumSize;
- (**gInvoiceTrees).trees[kLineItemTree].version = 1;
- (**gInvoiceTrees).trees[kLineItemTree].maxKeysPerPage = kKeysPerPage;
- (**gInvoiceTrees).trees[kLineItemTree].maxKeySize = kLineItemNumSize;
- (**gInvoiceTrees).trees[kInvoiceCustTree].version = 1;
- (**gInvoiceTrees).trees[kInvoiceCustTree].maxKeysPerPage = kKeysPerPage;
- (**gInvoiceTrees).trees[kInvoiceCustTree].maxKeySize = kCustomerNameSize;
- //set file type
- gFileReply.sfType = kType;
- //call the function
- NewFileErr = FSpCreate_BTreeFile(&gFileReply,&gInvoiceFCH,kCreator,kBlockSize,kSpareBlocks,gInvoiceTrees);
- if (NewFileErr != noErr)
- return NewFileErr;
- //add resource
- gSequenceHandle = (SRHandle)NewHandle(sizeof(SequenceRecord));
- (**gSequenceHandle).LineItems = 0;
- (**gSequenceHandle).Invoices = 0;
- // create resource fork
- FSpCreateResFile(&gFileReply.sfFile, kCreator, kType, smRoman);
- if (ResError() !=noErr) {
- NewFileErr = ResError();
- return NewFileErr;
- };
- // open resource fork of file
- gResFileNo = FSpOpenResFile(&gFileReply.sfFile, fsCurPerm);
- if (ResError() !=noErr) {
- NewFileErr = ResError();
- return NewFileErr;
- };
- UseResFile(gResFileNo);
- TempString[0]=0;
- AddResource((Handle)gSequenceHandle,kSRType,kSRID,TempString);
- //set file open flag
- gFileIsOpen = TRUE;
- //return to caller
- return NewFileErr;
- }
-
- short OpenFile(void){
- short OpenFileErr = noErr;
- gTypeList[0]= kType;
- StandardGetFile(NULL, 1, gTypeList, &gFileReply);
- if (!gFileReply.sfGood){
- //return if user cancels
- OpenFileErr = userCanceledErr;
- return OpenFileErr;
- }
- //pass the gFileReply to our B-Tree routine
- OpenFileErr = FSpOpen_BTreeFile(&gFileReply,fsCurPerm,&gInvoiceFCH);
- if (OpenFileErr != noErr)
- return OpenFileErr;
- //open the Resource Fork
- gResFileNo = FSpOpenResFile(&gFileReply.sfFile, fsCurPerm);
- if (ResError() != noErr) {
- OpenFileErr = ResError();
- return OpenFileErr;
- };
- (Handle)gSequenceHandle = GetResource(kSRType,kSRID);
- if (ResError() !=noErr) {
- OpenFileErr = ResError();
- return OpenFileErr;
- };
- gFileIsOpen = TRUE;
- }//that's all there is to it.
-
-
- short CloseFile(void) {
- short CloseFileErr = noErr;
- //flush volume
- WriteResource((Handle)gSequenceHandle);
- CloseFileErr = FlushVol(gFileReply.sfFile.name, gFileReply.sfFile.vRefNum);
- //close res file
- CloseResFile(gResFileNo);
- //close data file
- CloseFileErr = Close_BTreeFile(&gInvoiceFCH);
- //set structures to nil or zero, as case may be
- if (gInvoiceFCH)
- gInvoiceFCH = NULL;
- if (gInvoiceTrees)
- gInvoiceTrees = NULL;
- gFileIsOpen = FALSE;
- }
-